home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ian & Stuart's Australian Mac: Not for Sale
/
Another.not.for.sale (Australia).iso
/
fade into you
/
getting there
/
Apps
/
MOO-1.7.6.src
/
inc
/
opcode.h
< prev
next >
Wrap
Text File
|
1994-11-02
|
4KB
|
120 lines
/******************************************************************************
Copyright (c) 1992 Xerox Corporation. All rights reserved.
Portions of this code were written by Stephen White, aka ghond.
Use and copying of this software and preparation of derivative works based
upon this software are permitted. Any distribution of this software or
derivative works must comply with all applicable United States export
control laws. This software is made available AS IS, and Xerox Corporation
makes no warranty about the software, its performance or its conformity to
any specification. Any person obtaining a copy of this software is requested
to send their name and post office or electronic mail address to:
Pavel Curtis
Xerox PARC
3333 Coyote Hill Rd.
Palo Alto, CA 94304
Pavel@Xerox.Com
*****************************************************************************/
/*#define AST_h 1*/
#ifndef Opcode_h
#define Opcode_h 1
#define NUM_BUILTIN_NAMES 16
#define NUM_READY_VARS 32
enum Extended_Opcode {
OP_RANGESET,
Last_Extended_Opcode = 255
};
enum Opcode {
/* control/statement constructs with 1 tick: */
OP_IF, OP_WHILE, OP_EIF, OP_FORK, OP_FORK_WITH_ID, OP_FOR_LIST,
OP_FOR_RANGE,
/* expr-related opcodes with 1 tick: */
OP_INDEXSET, OP_PUSH_GET_PROP, OP_GET_PROP, OP_CALL_VERB, OP_PUT_PROP,
OP_BI_FUNC_CALL, OP_IF_QUES, OP_REF, OP_RANGE_REF,
/* arglist-related opcodes with 1 tick: */
OP_MAKE_SINGLETON_LIST, OP_CHECK_LIST_FOR_SPLICE,
/* arith binary ops -- 1 tick: */
OP_MULT, OP_DIV, OP_MOD, OP_ADD, OP_MINUS,
/* comparison binary ops -- 1 tick: */
OP_EQ, OP_NE, OP_LT, OP_LE, OP_GT, OP_GE, OP_IN,
/* logic binary ops -- 1 tick: */
OP_AND, OP_OR,
/* unary ops -- 1 tick: */
OP_UNARY_MINUS, OP_NOT,
/* assignments, 1 tick: */
OP_PUT,
OP_G_PUT = OP_PUT + NUM_READY_VARS,
/* variable references, no tick: */
OP_PUSH,
OP_G_PUSH = OP_PUSH + NUM_READY_VARS,
/* expr-related opcodes with no tick: */
OP_IMM, OP_MAKE_EMPTY_LIST, OP_LIST_ADD_TAIL, OP_LIST_APPEND,
OP_PUSH_REF, OP_PUT_TEMP, OP_PUSH_TEMP,
/* control/statement constructs with no ticks: */
OP_JUMP, OP_RETURN, OP_RETURN0, OP_DONE, OP_POP,
OP_EXTENDED, /* Used to add more opcodes */
OPTIM_NUM_START,
/* storage optimized imm-numbers can occupy 111-255, for 145 of them */
Last_Opcode = 255
};
#define OPTIM_NUM_LOW -10
#define OPTIM_NUM_HI (Last_Opcode - OPTIM_NUM_START + OPTIM_NUM_LOW)
#define IS_PUSH_n(o) ((o) >= (unsigned) OP_PUSH \
&& (o) < (unsigned) OP_G_PUSH)
#define IS_PUT_n(o) ((o) >= (unsigned) OP_PUT \
&& (o) < (unsigned) OP_G_PUT)
#define PUSH_n_INDEX(o) ((o) - OP_PUSH)
#define PUT_n_INDEX(o) ((o) - OP_PUT)
#define IS_OPTIM_NUM_OPCODE(o) ((o) >= (unsigned) OPTIM_NUM_START)
#define OPCODE_TO_OPTIM_NUM(o) ((o) - OPTIM_NUM_START + OPTIM_NUM_LOW)
#define OPTIM_NUM_TO_OPCODE(i) (OPTIM_NUM_START + (i) - OPTIM_NUM_LOW)
#define IN_OPTIM_NUM_RANGE(i) ((i) >= OPTIM_NUM_LOW && (i) <= OPTIM_NUM_HI)
/* ARITH_COMP_BIN_OP does not include AND, OR */
#define IS_ARITH_COMP_BIN_OP(o) ((o) >= (unsigned) OP_MULT \
&& (o) <= (unsigned) OP_IN)
/* whether the opcode needs one tick */
#define COUNT_TICK(o) ((o) <= OP_G_PUT)
typedef enum Opcode Opcode;
#endif
/* $Log: opcode.h,v $
* Revision 1.4 1992/10/23 23:03:47 pavel
* Added copyright notice.
*
* Revision 1.3 1992/10/17 20:48:34 pavel
* Added some (unsigned) casts to placate over-protective compilers.
* Removed unused IS_EXPR_OP macro.
*
* Revision 1.2 1992/08/28 23:19:33 pjames
* Added Extended_Opcode enumeration, and OP_RANGESET.
* Replaced LABEL with OP_EXTENDED.
*
* Revision 1.1 1992/07/20 23:23:12 pavel
* Initial RCS-controlled version.
* */